﻿using System;

namespace Model
{
    // 基本组件抽象类
    public abstract class Component : Object, IDisposable
    {
        // 组件ID
        public long InstId { get; private set; }

        // 当前组件对应的实体[允许system通过此获取该组件所属实体及其挂载的其他组件]
        public Entity Parent { get; set; }

        // 当前组件是否是从组件池中创建的
        private bool isFromPool;

        public bool IsFromPool
        {
            get
            {
                return this.isFromPool;
            }
            set
            {
                //如果是，说明是刚刚创建的组件，需要赋一个GID
                this.isFromPool = value;

                if (!this.isFromPool)
                {
                    return;
                }
                this.InstId = IDGenerater.GenerateId();
                
            }
        }

        // 获取GID[备用]
        protected Component()
        {
            //this.InstId = IDGenerater.GenerateId();
        }

        // 销毁标记
        public bool IsDisposed
        {
            get
            {
                return (this.InstId == 0);
            }
        }

        // 销毁自身
        public virtual void Dispose()
        {
            //已经销毁就直接结束
            if (this.IsDisposed)
                return;
            //设置标记为已销毁
            this.InstId = 0;
            //去主控类中把自身加入再循环队列中
            if (this.IsFromPool)
            {
                GameRoot.ObjectPool.Recycle(this);
            }

        }
        
    }
}
